package com.gitee.mrj.aiboot.annotation.config.sf.ui.widget;

import com.gitee.mrj.aiboot.annotation.config.KV;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Inherited
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD})
@Documented
public @interface SFSelectWidget {

    // SFDLSSize size() default SFDLSSize.DEFAULT;

    /**
     * 在文字框中显示提示讯息
     */
    String placeholder() default "";


    /**
     * 是否在选中项后清空搜索框，只在 `mode` 为 `multiple` 或 `tags` 时有效，默认：`true`
     */
    boolean autoClearSearchValue() default true;

    /**
     * 支持清除，默认：`false`
     */
    boolean allowClear() default false;

    /**
     * 是否无边框，默认：`false`
     */
    boolean borderless() default false;

    /**
     * 默认获取焦点，默认：`false`
     */
    boolean autoFocus() default false;

    /**
     * 下拉菜单的 className 属性
     */
    String dropdownClassName() default "";

    /**
     * 下拉菜单和选择器同宽，默认：`true`
     */
    boolean dropdownMatchSelectWidth() default true;

    /**
     * 下拉菜单的 style 属性
     */
    KV[] dropdownStyle() default {};

    /**
     * 是否使用服务端搜索，当为 `true` 时，将不再在前端对 `nz-option` 进行过滤，默认：`false`
     */
    boolean serverSearch() default false;

    /**
     * 最多选中多少个标签，默认：`Infinity`
     */
    int maxMultipleCount() default Integer.MIN_VALUE;

    /**
     * 设置 `nz-select` 的模式，`tags` 建议增加 `default: null`，否则可能会遇到初始化有一个空的标签
     */
    SelectMode mode() default SelectMode.DEFAULT;

    /**
     * 当下拉列表为空时显示的内容
     */
    String notFoundContent() default "";

    /**
     * 使单选模式可搜索，默认：`false`
     */
    boolean showSearch() default false;


    /**
     * 搜索抖动时间，默认：`300`
     */
    int searchDebounceTime() default Integer.MIN_VALUE;

    /**
     * 搜索加载中文本
     */
    String searchLoadingText() default "";

    /**
     * 在 `tags` 和 `multiple` 模式下自动分词的分隔符
     */
    String[] tokenSeparators() default {};

    /**
     * 是否显示箭头，默认：单选为 `true`，多选为 `false`
     */
    //boolean showArrow() default true;
    String showArrow() default "";

    /**
     * 最多显示多少个 tag
     */
    int maxTagCount() default Integer.MIN_VALUE;


    /**
     * 自定义的选择框后缀图标
     */
    String suffixIcon() default "";


    /**
     * 下拉菜单中每个 Option 的高度，默认：`32`
     */
    int optionHeightPx() default Integer.MIN_VALUE;

    /**
     * 下拉菜单中最多展示的 Option 个数，超出部分滚动，默认：`8`
     */
    int optionOverflowSize() default Integer.MIN_VALUE;

    public enum SelectMode {
        DEFAULT("default"),
        MULTIPLE("multiple"),
        TAGS("tags");

        private String type;

        SelectMode(String type) {
            this.type = type;
        }

        public String value() {
            return this.type;
        }
    }
}
